

#include <stdlib.h>

char* itoa(int value, char* string, int radix)  
{  
    char tmp[48];  
    char* tp = tmp;  
    int i;  
    unsigned v;  
    int sign;  
    char* sp;  
    if (radix > 36 || radix <= 1)  
    {
        return 0;  
    }  
    sign = (radix == 10 && value < 0);  
    if (sign)  
        v = -value;  
    else  
        v = (unsigned)value;  
    while (v || tp == tmp)  
    {  
        i = v % radix;  
        v = v / radix;  
        if (i < 10)  
            *tp++ = i + '0';  
        else  
            *tp++ = i + 'a' - 10;  
    }  
    if (string == 0)  
        string = (char*)malloc((tp-tmp)+sign+1);  
    sp = string;  
    if (sign)  
        *sp++ = '-';  
    while (tp > tmp)  
        *sp++ = *--tp;  
    *sp = 0;  
    return string;  
}
